{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "490a3ab6-52e3-46f9-85ae-70d637a3892a",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:27.229399Z",
          "iopub.status.busy": "2025-09-26T23:17:27.229211Z",
          "iopub.status.idle": "2025-09-26T23:17:28.148987Z",
          "shell.execute_reply": "2025-09-26T23:17:28.148598Z"
        },
        "id": "490a3ab6-52e3-46f9-85ae-70d637a3892a"
      },
      "outputs": [],
      "source": [
        "!pip install -q numerapi lightgbm pyarrow scikit-learn scipy matplotlib\n",
        "# make sure you restart your kernel session before continuing"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "552f701c-1594-4ed7-940d-98470159e961",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:28.150414Z",
          "iopub.status.busy": "2025-09-26T23:17:28.150307Z",
          "iopub.status.idle": "2025-09-26T23:17:28.729060Z",
          "shell.execute_reply": "2025-09-26T23:17:28.728797Z"
        },
        "id": "552f701c-1594-4ed7-940d-98470159e961"
      },
      "outputs": [],
      "source": [
        "from numerapi import NumerAPI\n",
        "import pandas as pd\n",
        "\n",
        "DATASET_VERSION = 'v2.1'\n",
        "\n",
        "napi = NumerAPI()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "99e74658",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 70
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:28.730407Z",
          "iopub.status.busy": "2025-09-26T23:17:28.730282Z",
          "iopub.status.idle": "2025-09-26T23:17:30.457627Z",
          "shell.execute_reply": "2025-09-26T23:17:30.456690Z"
        },
        "id": "99e74658",
        "outputId": "cb6a0013-771d-420d-cab9-a6f1119d3388"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "signals/v2.1/train.parquet: 273MB [00:08, 33.3MB/s]                           \n",
            "signals/v2.1/validation.parquet: 456MB [00:06, 66.7MB/s]                           \n"
          ]
        },
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            },
            "text/plain": [
              "'signals/v2.1/validation.parquet'"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "napi.download_dataset(f'signals/{DATASET_VERSION}/train.parquet')\n",
        "napi.download_dataset(f'signals/{DATASET_VERSION}/validation.parquet')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "4ec3babc-9d2d-4388-8fdc-5065805bb1a1",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:30.459614Z",
          "iopub.status.busy": "2025-09-26T23:17:30.459396Z",
          "iopub.status.idle": "2025-09-26T23:17:31.177151Z",
          "shell.execute_reply": "2025-09-26T23:17:31.176844Z"
        },
        "id": "4ec3babc-9d2d-4388-8fdc-5065805bb1a1"
      },
      "outputs": [],
      "source": [
        "train = pd.read_parquet(f'signals/{DATASET_VERSION}/train.parquet')\n",
        "validation = pd.read_parquet(f'signals/{DATASET_VERSION}/validation.parquet')"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f4d97db1-cd89-4f0d-9533-c978950b629f",
      "metadata": {
        "id": "f4d97db1-cd89-4f0d-9533-c978950b629f"
      },
      "source": [
        "# Tickers\n",
        "\n",
        "The Signals dataset contains two tickers: `numerai_ticker` and `composite_figi`:\n",
        "- `numerai_ticker` is given for the entire history\n",
        "- `composite_figi` only goes back to September 2022."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "eb85e867-9635-44d0-a89c-b928cd405413",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 607
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:31.178355Z",
          "iopub.status.busy": "2025-09-26T23:17:31.178280Z",
          "iopub.status.idle": "2025-09-26T23:17:32.101411Z",
          "shell.execute_reply": "2025-09-26T23:17:32.101165Z"
        },
        "id": "eb85e867-9635-44d0-a89c-b928cd405413",
        "outputId": "c9417dbd-cf04-46c6-ee9e-4a3166ae6b20"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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bNmyBZ999hm2bNkCQogsa/k333yDefPmYfz48fjqq69Qu3ZtsCyL6dOna1gAy5KAgACsW7cO06dPh5eXFywtLcEwDIYPH16u46pTWKwfeRXHqy9KpRJ3796VveiX9nxTU1PRuXNnWFhY4Msvv4SrqyuMjY1x+fJlzJ49W9ZHcHAwxo4diz179uDw4cMIDAzE4sWLce7cOdSvXx+CIIBhGPz9999ar4EucdtFoct1LSwGmuf5EvVZ3Fjidfnhhx9kll51Cp6vtqzcQ4cORUREBGbOnIlWrVrB3NwcgiCgT58+r+1+LSnvvPMOtm7dim+//RZ//PGHTFAKgoA6depg06ZNWo8tKIR1zVTO8zx69uyJlJQUzJ49G02bNoWZmRkePXqEsWPHalyrisioXRboez+WBx4eHrhz5w7++usvHDx4EDt37sSqVaswf/58LFy4sMT9CYKAnj17YtasWVr3i4KsMtO0aVMAwI0bN/Duu++WWb9l9dzS9X4o7lleWgRBQIsWLfDjjz9q3V9wEaksKxbcvHkTQP7CSkxMDLp3746mTZvixx9/RIMGDWBoaIgDBw5g6dKlOj1nq8O9S6EAVHRTKFWSUaNGYd68ebh+/To2b94MNzc3KZESAISGhqJr16747bffZMelpqZqTcpUFE5OThAEATExMTKrgbaaqqGhofD390dwcLC0LTs7W6NWcUkSVDk5OeH69esQBEEmMETX65LUTi4NoaGhyMrKkrnjlvZ8T548ieTkZISFhaFTp07S9tjYWK3tW7RogRYtWmDu3LmIiIiAj48P1qxZg0WLFsHV1RWEELi4uBT7EqJvgrDisLa21lqXWl+LUmGIXhcWFhaStaOkPH/+HMeOHcPChQsxf/58abtoRS8tJbnGrq6u0stqcbz77rvo1asXxo4di1q1amH16tWyfo4ePQofH58yfZG+ceMG7t69iw0bNsjKFR45ckTvPp2cnHDs2DG8fPlStkCiS61mQLdr9rqfHffu3QMhRPbZ3717FwCkMAonJyet56htTmZmZhg2bBiGDRuG3Nxc+Pr64uuvv8acOXMKLelU2H3n6uqKly9f6v190QcnJydERkZqXJN79+7p1d/bb78Na2tracG5uMUdXa+16A1V8NlVmudWcd//op7lRfH48WONkocF7zFXV1dcu3YN3bt3L7dnvTZ4nsfmzZth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qVuntZU1q8yxppYmBtiowyJRaeKzKRVHwc+ltPdiwXCKqd3csC4irsQZ88uSjzq5UI8KSuFQSzeFQqkiUNFNqTbwAtHJZbiiCDl+DyHHi7ZuPs9QYsrmK1jNMrIXTY5lMK2HmxRrmZiWhaSXOUjNUoIBA3tLY8zdfRNGBlyxJc2Kw8pEgZ9GtdErhlqc64h2DV+LhSw1S4mlR6OxLiIO37zbHNZmRgi/96xYy7MuNa4LUlhZs8oca5qWladTOwJqTawOlOZe1BaSwrEMvvVtoVfm/LJi77UEzOrjQe9NStFQSzeFQqnksBU9gUePHuH999+HjY0NTExM/t/evYdFWeZ/HP8MyEGhGcQDYKJiWoqKx1KybC0SC9tM200rpbKDppb623TdNdNqoywzy9It12w3zWq37aBlGaZtiamYeSBNjVZLgTzAqMX5+f3BMkkeODjDzA3v13VxXfI8N8N36gbmM/dJXbp00aZNm1z3LcvS9OnTFRUVpYYNGyohIUG7d1d8MX/kyBHdcsststvtCgsL06hRo3T8+PEKbbZu3arLL79cwcHBio6O1qxZs2rl+aH21MbZ155W/p79zPcy/reJWEXlI1s39Gipu/pdoAcSO+gPiRfpsnZNJUnH8n8ZkUp5P0P3Lt1crcAtSbf3jVHfdk3P6UVum6YhNf7amsj9qSwQD39pveZ54Niik/3100wt33LA9fklMeFyNAzw6Pf0tDv6tmE0sQ4o36Cxuj+5jRsFnHLCQrmBnaO04NYeCmvknT5evh8GcHqe2ooUANzLq6H76NGj6tu3rwICAvTBBx8oIyNDs2fPVuPGjV1tZs2apWeffVYLFizQF198oZCQECUmJio//5dwdcstt2jHjh1atWqVli9frk8//VR33323677T6dSAAQPUunVrpaen68knn9SMGTP04osv1urzhWed69TK8BDfCE4nb7xWVecFl01aOVFYopJS65zOKnfHUUG+PPrrDuOXfekK3h9uz1JBcfVHzn1J+TpemK18g8aqxpCQQH9NTGivTdOuPuubLgM7Ryl92tWamHChwrzwBpMvL+GAlzG9HIAhvDq9/IknnlB0dLRefvll17WYmBjXvy3L0jPPPKNp06bp+uuvlyT9/e9/V0REhN5++20NGzZMX3/9tVauXKmNGzeqV69ekqTnnntO1157rZ566im1aNFC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gNANAAAAw7CmG4A5CN0AAAAwC9PLARjEq6E7JSVFF198sc477zw1b95cgwcP1q5duyq0yc/P19ixY9WkSROFhoZq6NChys7OrtBm3759SkpKUqNGjdS8eXM98MADKi4urtBmzZo16tGjh4KCgtSuXTstXrzY008PAAAAHsFGagDM4dXQvXbtWo0dO1br16/XqlWrVFRUpAEDBujEiROuNhMnTtR7772nN998U2vXrtWBAwc0ZMgQ1/2SkhIlJSWpsLBQ69at0yuvvKLFixdr+vTprjaZmZlKSkpS//79tWXLFk2YMEF33nmnPvzww1p9vgAAAHAnQjcA32ezLN856PDHH39U8+bNtXbtWvXr1095eXlq1qyZli5dqhtvvFGStHPnTnXs2FFpaWnq06ePPvjgAw0aNEgHDhxQRESEJGnBggWaMmWKfvzxRwUGBmrKlClasWKFtm/f7vpew4YNU25urlauXFlpXU6nUw6HQ3l5ebLb7Z558gAAAKiaz5+VVj0oxQ2ThvzV29UAqKeqmhN9ak13Xl6eJCk8PFySlJ6erqKiIiUkJLjadOjQQa1atVJaWpokKS0tTV26dHEFbklKTEyU0+nUjh07XG1OfozyNuWPAQAAAJMwvRyAORp4u4BypaWlmjBhgvr27avOnTtLkrKyshQYGKiwsLAKbSMiIpSVleVqc3LgLr9ffu9sbZxOp37++Wc1bNiwwr2CggIVFBS4Pnc6nef+BAEAAOAebKQGwCA+M9I9duxYbd++XcuWLfN2KUpJSZHD4XB9REdHe7skAAAA/Boj3QAM4BOhe9y4cVq+fLk++eQTtWzZ0nU9MjJShYWFys3NrdA+OztbkZGRrja/3s28/PPK2tjt9lNGuSVp6tSpysvLc33s37//nJ8jAAAA3MVntiQCgEp5NXRblqVx48bp3//+t1avXq2YmJgK93v27KmAgAClpqa6ru3atUv79u1TfHy8JCk+Pl7btm1TTk6Oq82qVatkt9sVGxvranPyY5S3KX+MXwsKCpLdbq/wAQAAAB/B9HIABvHqmu6xY8dq6dKleuedd3Teeee51mA7HA41bNhQDodDo0aN0qRJkxQeHi673a7x48crPj5effr0kSQNGDBAsbGxGjFihGbNmqWsrCxNmzZNY8eOVVBQkCRp9OjRmjdvniZPnqw77rhDq1ev1htvvKEV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5Khly5bas2ePBg4cKKnsFysvsOqPgwcPasiQIUpOTtbs2bPVsWNHSVJBQYGXK0Nt2blzp6644gr16dNHDzzwgG644QaNGzdOTqdTEiOd9UVGRoZ69+6tjIwM7d69WwsXLtTVV1+t1NRU+fn50Q/qiW3btumyyy7Tu+++q+XLl2v8+PFatGiRSktL6QP1SEZGhho2bKht27bpnnvukcTrw/pm//79uu6665ScnKyUlBS1a9dOklRcXCzJ/eGb0I06y7Is2Ww2hYaGaubMmcrMzFRSUpKksqlEBw4c8HKFqA1bt25VRESEZs+erdLSUt13330aNGiQrrjiCv3jH/9Qfn6+t0uEBxUXFyslJUVJSUmaNWuWhg8frt/97nfq0qWLSkpK9P3338tms3m7THhYSUmJUlJSNGjQIP3zn//U559/rgULFigxMVGJiYlasWIFI971wH//+18NHTpUt912m9555x198803uuGGG/TSSy+psLCQ3wX1SFBQkMLCwjR48GClpaVp9OjRkspeHx4/ftzL1aE2rFu3Tm3bttVTTz2l0tJSTZs2TcOHD9fw4cO1evVqt8+GI3SjzrLZbIqLi1NsbKyuuOIKPfHEE/rmm280ZMgQ3XHHHXrxxRf1008/ebtMeNjhw4fVoEEDSdJvfvMb7d69W127dlXv3r2VnJysxx9/XBKjnXVVcXGxMjMz1bZtW9e1zz77TJ988on69eunzp07a+bMmcx8qONKS0u1f/9+RUdHu65169ZNKSkpuvvuu3XjjTdq/fr1LDmow0pKSvTOO++oe/fuGj9+vOv/9YQJE1RYWKjdu3d7uULUpi5duqhnz5668847dfvttystLU3/93//pzvuuENLlixRUVGRt0uEh+3fv18Oh0OSdNlll2nTpk1q2LChbDabEhIStGjRIknue33YwC2PAvgof39/ffvtt/ryyy81ePBgORwODRkyRHl5efrqq6/UqFEjFRcXu0IZ6p7w8HBt2LBBf//739WsWTPNnz9fzZs3lyRdcsklSk5O1tVXX62+fft6uVJ4QnBwsLp3767Zs2erWbNmysjI0KJFi7Ro0SJ16NBBGRkZuvXWWxUXF6cbbrjB2+XCQwICAtS5c2etXbtWR48eVePGjSVJzZo109SpU5WTk6NHHnlEr732mux2u5erhSf4+/vL4XCob9++ioyMdF23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",
            "text/plain": [
              "<Figure size 1000x600 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "def plot_ticker_counts_per_date(df, title):\n",
        "    df['date'] = pd.to_datetime(df['date'])\n",
        "\n",
        "    # Count unique 'numerai_ticker' and 'composite_figi' per 'date'\n",
        "    nticker_count_per_date = df.groupby('date')['numerai_ticker'].nunique().reset_index(name='numerai_ticker_count')\n",
        "    figi_count_per_date = df.groupby('date')['composite_figi'].nunique().reset_index(name='figi_count')\n",
        "\n",
        "    # Merge the counts into a single DataFrame for plotting\n",
        "    merged_counts = pd.merge(nticker_count_per_date, figi_count_per_date, on='date')\n",
        "\n",
        "    # Plotting\n",
        "    plt.figure(figsize=(10, 6))\n",
        "    plt.plot(merged_counts['date'], merged_counts['numerai_ticker_count'], label='Unique Numerai Tickers', marker='o')\n",
        "    plt.plot(merged_counts['date'], merged_counts['figi_count'], label='Unique Composite FIGIs', marker='x')\n",
        "\n",
        "    plt.title(title)\n",
        "    plt.xlabel('Date')\n",
        "    plt.ylabel('Count')\n",
        "    plt.legend()\n",
        "    plt.xticks(rotation=45)\n",
        "    plt.tight_layout()\n",
        "    plt.show()\n",
        "\n",
        "plot_ticker_counts_per_date(validation, 'Validation Dataset numerai_ticker and composite_figi Counts per Date')"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "c60a1d87-0cbd-4a4b-be6b-66a882fc7895",
      "metadata": {
        "id": "c60a1d87-0cbd-4a4b-be6b-66a882fc7895"
      },
      "source": [
        "If you have Bloomberg tickers, you can map to `numerai_ticker` by replacing the exchange code with the ISO country code"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "8b0f3b02-577c-4ead-a11c-01fbbef72144",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:32.102516Z",
          "iopub.status.busy": "2025-09-26T23:17:32.102380Z",
          "iopub.status.idle": "2025-09-26T23:17:32.107915Z",
          "shell.execute_reply": "2025-09-26T23:17:32.107679Z"
        },
        "id": "8b0f3b02-577c-4ead-a11c-01fbbef72144"
      },
      "outputs": [],
      "source": [
        "import random\n",
        "\n",
        "# Computed using https://stockmarketmba.com/globalstockexchanges.php\n",
        "# and https://www.isin.net/country-codes/\n",
        "# Converting Bloomberg exchange code -> Country -> ISO 3166\n",
        "TICKER_CTRY_MAP = {\n",
        "    \"AU\": \"AU\", \"AV\": \"AT\", \"BB\": \"BE\", \"BZ\": \"BR\", \"CA\": \"CA\",\n",
        "    \"CB\": \"CO\", \"CH\": \"CN\", \"CI\": \"CL\", \"CN\": \"CA\", \"CP\": \"CZ\",\n",
        "    \"DC\": \"DK\", \"EY\": \"EG\", \"FH\": \"FI\", \"FP\": \"FR\", \"GA\": \"GR\",\n",
        "    \"GR\": \"DE\", \"GY\": \"DE\", \"HB\": \"HU\", \"HK\": \"HK\", \"ID\": \"IE\",\n",
        "    \"IJ\": \"ID\", \"IM\": \"IT\", \"IN\": \"IN\", \"IT\": \"IL\", \"JP\": \"JP\",\n",
        "    \"KS\": \"KR\", \"LN\": \"GB\", \"MF\": \"MX\", \"MK\": \"MY\", \"NA\": \"NL\",\n",
        "    \"NO\": \"NO\", \"NZ\": \"NZ\", \"PE\": \"PE\", \"PL\": \"PT\", \"PM\": \"PH\",\n",
        "    \"PW\": \"PL\", \"QD\": \"QA\", \"RM\": \"RU\", \"SJ\": \"ZA\", \"SM\": \"ES\",\n",
        "    \"SP\": \"SG\", \"SS\": \"SE\", \"SW\": \"CH\", \"TB\": \"TH\", \"TI\": \"TR\",\n",
        "    \"TT\": \"TW\", \"UH\": \"AE\", \"US\": \"US\", \"UQ\": \"US\",\n",
        "}\n",
        "\n",
        "def map_country_code(row):\n",
        "    if row[\"bloomberg_ticker\"] is None:\n",
        "        return None\n",
        "    split_ticker = row[\"bloomberg_ticker\"].split()\n",
        "    if len(split_ticker) < 2:\n",
        "        print(f'No country code for {row[\"bloomberg_ticker\"]}')\n",
        "        return None\n",
        "\n",
        "    ticker = split_ticker[0]\n",
        "    country_code = split_ticker[-1]\n",
        "    iso_country_code = TICKER_CTRY_MAP.get(country_code)\n",
        "    return f\"{ticker} {iso_country_code}\"\n",
        "\n",
        "# create test dataframe with Bloomberg tickers\n",
        "df = pd.DataFrame([\n",
        "  {'bloomberg_ticker': '000640 KS', 'signal': random.random()},\n",
        "  {'bloomberg_ticker': '1103 TT', 'signal': random.random()},\n",
        "  {'bloomberg_ticker': 'A2A IM', 'signal': random.random()},\n",
        "  {'bloomberg_ticker': 'ABBN SW', 'signal': random.random()}\n",
        "])\n",
        "\n",
        "# convert to numerai_ticker\n",
        "df['numerai_ticker'] = df.apply(\n",
        "    map_country_code, axis=1\n",
        ")\n",
        "\n",
        "assert df.iloc[0]['numerai_ticker'] == '000640 KR'\n",
        "assert df.iloc[1]['numerai_ticker'] == '1103 TW'\n",
        "assert df.iloc[2]['numerai_ticker'] == 'A2A IT'\n",
        "assert df.iloc[3]['numerai_ticker'] == 'ABBN CH'"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b09e5700-1208-4430-b623-c1b4265dc0f0",
      "metadata": {
        "id": "b09e5700-1208-4430-b623-c1b4265dc0f0"
      },
      "source": [
        "# Features\n",
        "\n",
        "Features with `{n}(d|w)` in the name (for example, `feature_adv_20d_factor`) are time-series features that are computed over `n` days or `n` weeks.\n",
        "\n",
        "Features with `country_ranknorm` in the name are grouped by country, then ranked, then gaussianized.\n",
        "\n",
        "Features with `factor` in the name refer to risk factors that most of the targets are neutral to.\n",
        "\n",
        "PPO, RSI and TRIX are examples of technical indicators.\n",
        "\n",
        "PPO is a percentage price oscillator that compares shorter and longer moving averages in a ratio\n",
        "RSI is the relative strength index usually used as an overbought/oversold indicator\n",
        "TRIX is a triple exponential moving average indicator usually used as momentum or reversal feature\n",
        "\n",
        "`momentum_52w_less_4w` refers to one year return of a stock excluding the last 4 weeks.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "b655eb42",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:32.108945Z",
          "iopub.status.busy": "2025-09-26T23:17:32.108877Z",
          "iopub.status.idle": "2025-09-26T23:17:32.162024Z",
          "shell.execute_reply": "2025-09-26T23:17:32.161802Z"
        },
        "id": "b655eb42",
        "outputId": "e9bee097-5c54-4406-8328-d9f714b447e8"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "['feature_country',\n",
              " 'feature_adv_20d_factor',\n",
              " 'feature_beta_factor',\n",
              " 'feature_book_to_price_factor',\n",
              " 'feature_dividend_yield_factor',\n",
              " 'feature_earnings_yield_factor',\n",
              " 'feature_growth_factor',\n",
              " 'feature_impact_cost_factor',\n",
              " 'feature_market_cap_factor',\n",
              " 'feature_momentum_12w_factor',\n",
              " 'feature_momentum_26w_factor',\n",
              " 'feature_momentum_52w_factor',\n",
              " 'feature_momentum_52w_less_4w_factor',\n",
              " 'feature_ppo_60d_130d_country_ranknorm',\n",
              " 'feature_ppo_60d_90d_country_ranknorm',\n",
              " 'feature_price_factor',\n",
              " 'feature_rsi_130d_country_ranknorm',\n",
              " 'feature_rsi_60d_country_ranknorm',\n",
              " 'feature_rsi_90d_country_ranknorm',\n",
              " 'feature_trix_130d_country_ranknorm',\n",
              " 'feature_trix_60d_country_ranknorm',\n",
              " 'feature_value_factor',\n",
              " 'feature_volatility_factor']"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "train.filter(like=\"feature_\").columns.tolist()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "21782d68-7d7f-4df7-864d-0cdd92a00adb",
      "metadata": {
        "id": "21782d68-7d7f-4df7-864d-0cdd92a00adb"
      },
      "source": [
        "# Modeling\n",
        "\n",
        "The dataset includes a small set of features that can be used on its own or in addition to your existing dataset. In this example, we will show how to use the V1 features to train and submit predictions."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "7da5fa8a-d8a1-4bc7-8fe9-e2664aaaf55f",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:32.163127Z",
          "iopub.status.busy": "2025-09-26T23:17:32.163046Z",
          "iopub.status.idle": "2025-09-26T23:17:57.579571Z",
          "shell.execute_reply": "2025-09-26T23:17:57.579301Z"
        },
        "id": "7da5fa8a-d8a1-4bc7-8fe9-e2664aaaf55f",
        "outputId": "2e9df5d8-4fec-46e1-9bb6-441c21400c82"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.372282 seconds.\n",
            "You can set `force_col_wise=true` to remove the overhead.\n",
            "[LightGBM] [Info] Total Bins 5610\n",
            "[LightGBM] [Info] Number of data points in the train set: 2536318, number of used features: 22\n",
            "[LightGBM] [Info] Start training from score 0.426373\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
            "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "<style>#sk-container-id-1 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-1 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-1 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-1 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-1 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-1 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-1 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-1 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-1 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-1 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LGBMRegressor(colsample_bytree=0.1, learning_rate=0.01, max_depth=5,\n",
              "              n_estimators=2000)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LGBMRegressor</div></div><div><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LGBMRegressor(colsample_bytree=0.1, learning_rate=0.01, max_depth=5,\n",
              "              n_estimators=2000)</pre></div> </div></div></div></div>"
            ],
            "text/plain": [
              "LGBMRegressor(colsample_bytree=0.1, learning_rate=0.01, max_depth=5,\n",
              "              n_estimators=2000)"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import lightgbm as lgb\n",
        "\n",
        "feature_cols = [col for col in train.columns if col.startswith('feature_')]\n",
        "\n",
        "# there are two non-numerical feature cols\n",
        "feature_cols = [s for s in feature_cols if s not in (\"feature_country\", \"feature_exchange_code\")]\n",
        "\n",
        "# https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html\n",
        "model = lgb.LGBMRegressor(\n",
        "  n_estimators=2000,\n",
        "  learning_rate=0.01,\n",
        "  max_depth=5,\n",
        "  num_leaves=2**5-1,\n",
        "  colsample_bytree=0.1\n",
        ")\n",
        "\n",
        "# This will take a few minutes 🍵\n",
        "model.fit(\n",
        "  train[feature_cols],\n",
        "  train[\"target_chili_60\"]\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8288cfd2",
      "metadata": {
        "id": "8288cfd2"
      },
      "source": [
        "# Scores\n",
        "\n",
        "Signals uses `alpha` and `meta portfolio contribution` to determine the performance of a signal. These can be calculated with functions from our open-source `numerai-tools` package.\n",
        "\n",
        "First, let's download the required data:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "11236339",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 70
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:57.580711Z",
          "iopub.status.busy": "2025-09-26T23:17:57.580514Z",
          "iopub.status.idle": "2025-09-26T23:17:58.651621Z",
          "shell.execute_reply": "2025-09-26T23:17:58.651018Z"
        },
        "id": "11236339",
        "outputId": "22df2342-48da-46ee-c365-e8cf70d97ea8"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "signals/v2.1/validation_neutralizer.parquet: 3.99GB [01:18, 50.8MB/s]                            \n",
            "signals/v2.1/validation_sample_weights.parquet: 24.4MB [00:00, 71.8MB/s]                            \n"
          ]
        },
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            },
            "text/plain": [
              "'signals/v2.1/validation_sample_weights.parquet'"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "napi.download_dataset(f'signals/{DATASET_VERSION}/validation_neutralizer.parquet')\n",
        "napi.download_dataset(f'signals/{DATASET_VERSION}/validation_sample_weights.parquet')"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2647e712",
      "metadata": {
        "id": "2647e712"
      },
      "source": [
        "Then, we can use this data to calculate alpha over the validation period."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "d1da208e",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:58.654087Z",
          "iopub.status.busy": "2025-09-26T23:17:58.653878Z",
          "iopub.status.idle": "2025-09-26T23:17:59.206668Z",
          "shell.execute_reply": "2025-09-26T23:17:59.206187Z"
        },
        "id": "d1da208e"
      },
      "outputs": [],
      "source": [
        "# filter out NaN 60D targets at the end of the validation set\n",
        "#  the rest should be filled\n",
        "validation = validation.dropna(subset=[\"target_chili_60\"]).set_index(\"numerai_ticker\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "4967a8a7",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:59.208490Z",
          "iopub.status.busy": "2025-09-26T23:17:59.208389Z",
          "iopub.status.idle": "2025-09-26T23:17:59.854628Z",
          "shell.execute_reply": "2025-09-26T23:17:59.854148Z"
        },
        "id": "4967a8a7"
      },
      "outputs": [],
      "source": [
        "!pip install -q --no-deps numerai-tools"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "djwOHcmlw0kH",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:17:59.856531Z",
          "iopub.status.busy": "2025-09-26T23:17:59.856386Z",
          "iopub.status.idle": "2025-09-26T23:22:32.704646Z",
          "shell.execute_reply": "2025-09-26T23:22:32.703495Z"
        },
        "id": "djwOHcmlw0kH",
        "outputId": "e81c3d57-5a36-45b4-dc9b-9371157ed48b"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "100%|██████████| 651/651 [29:48<00:00,  2.75s/it]\n"
          ]
        }
      ],
      "source": [
        "from tqdm import tqdm\n",
        "from numerai_tools.scoring import alpha, center, filter_sort_index_many\n",
        "\n",
        "# read neutralizers and sample weights and format their date columns\n",
        "sample_weights = (\n",
        "    pd.read_parquet(f'signals/{DATASET_VERSION}/validation_sample_weights.parquet')\n",
        "    .set_index(\"numerai_ticker\")\n",
        ")\n",
        "sample_weights[\"date\"] = pd.to_datetime(sample_weights[\"date\"])\n",
        "\n",
        "alpha_scores = {}\n",
        "\n",
        "for date, group in tqdm(\n",
        "    validation.groupby(\"date\"),\n",
        "    total=validation[\"date\"].nunique()\n",
        "):\n",
        "    # first, predict on the validation set\n",
        "    predictions = pd.DataFrame(\n",
        "        model.predict(group[feature_cols]),\n",
        "        index=group.index,\n",
        "        columns=[\"prediction\"],\n",
        "    )\n",
        "\n",
        "    # then gather neutralizers and sample weights\n",
        "    # the neutralizers are very big, so to reduce memory usage, we\n",
        "    #  use parquet predicate filters to only load the relevant date\n",
        "    neutralizers = (\n",
        "        pd.read_parquet(\n",
        "            f'signals/{DATASET_VERSION}/validation_neutralizer.parquet',\n",
        "            filters=[(\"date\", \"=\", date.strftime(\"%Y-%m-%d\"))],\n",
        "        ) # then set the index, filter to only the neutralizers, and drop NaNs\n",
        "        .set_index(\"numerai_ticker\")\n",
        "        .filter(like=\"neutralizer_\")\n",
        "        .dropna(axis=0, how=\"all\")\n",
        "    )\n",
        "\n",
        "    # get sample weights for this date, drop NaNs\n",
        "    weights = (\n",
        "        sample_weights.loc[sample_weights.date == date, \"sample_weights\"]\n",
        "        .dropna()\n",
        "    )\n",
        "\n",
        "    # align and sort all datasets by common ticker index\n",
        "    predictions, neutralizers, weights, targets = filter_sort_index_many([\n",
        "        predictions,\n",
        "        neutralizers,\n",
        "        weights,\n",
        "        group[\"target_chili_60\"],\n",
        "    ])\n",
        "\n",
        "    # finally, calculate alpha\n",
        "    alpha_score = alpha(\n",
        "        predictions=predictions,\n",
        "        neutralizers=neutralizers,\n",
        "        sample_weights=weights,\n",
        "        targets=targets,\n",
        "    )\n",
        "\n",
        "    alpha_scores[date] = alpha_score\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "87c08b98",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 447
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:22:32.709267Z",
          "iopub.status.busy": "2025-09-26T23:22:32.708091Z",
          "iopub.status.idle": "2025-09-26T23:22:32.869683Z",
          "shell.execute_reply": "2025-09-26T23:22:32.868902Z"
        },
        "id": "87c08b98",
        "outputId": "896851ea-d26c-4fc8-8d5e-9f2780531d8c"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Axes: >"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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zVlv3RURaeIURqTRKa2wMfvbU6MiEwZH0qqFm8kViYhIfVIYkUbn/XUHOXiiiEAfd+67tKPZ5YiISD1TGJFGpaTcxrxVBwD4y4gueLvrjQUiIk2dwog0Kst3ZJBXXE6Yvyc39mtrdjkiItIAFEak0SitsPH66v0A/Ll/W5ydLCZXJCIiDUFhRBqN177fx97MAgK83RgXE2l2OSIi0kAURqRROJBdwFtrUgB4dlRPPUEjItKMKIxIo7B4Yxo2u8GlXQK5smeo2eWIiEgDUhgR05VV2PlsyxFAL8MTEWmOahVG5s2bR2RkJB4eHgwaNIiNGzees31ubi6TJ08mNDQUd3d3OnfuzLffflurgqXp+WFPJicKywjycWdYl0CzyxERkQZW40UclixZwrRp03jzzTcZNGgQr776KiNGjCA5OZmgoKDT2peVlXH55ZcTFBTEp59+SlhYGIcOHcLf378u6pcmYPGmdABujG6Li7MG60REmpsah5GXX36Zu+++mwkTJgDw5ptv8s033zB//nwef/zx09rPnz+fnJwc1q1bh6urKwCRkZHnV7U0GcfyilmzNxuAm/qHm1yNiIiYoUb/G1pWVkZCQgKxsbG/fYGTE7GxscTHx59xny+//JKYmBgmT55McHAwPXv25LnnnsNms531OKWlpVit1iofaZo+Wn8IuwED27eifUALs8sRERET1CiMHD9+HJvNRnBwcJXtwcHBZGRknHGflJQUPv30U2w2G99++y1PP/00L730Es8+++xZjzN79mz8/PwqP+Hh+j/mpig9p4j5Px8E4M7BkabWIiIi5qn3G/R2u52goCDefvttoqOjGTNmDE8++SRvvvnmWfeZPn06eXl5lZ/09PT6LlMaWIXNzqQPEygutzEgsiUjeoSYXZKIiJikRnNGAgICcHZ2JjMzs8r2zMxMQkLOfDEJDQ3F1dUVZ2fnym3dunUjIyODsrIy3NxOX9zK3d0dd3f3mpQmDuaLxKPsPmbF38uV127ui8Wipd9FRJqrGo2MuLm5ER0dTVxcXOU2u91OXFwcMTExZ9xn8ODB7N+/H7vdXrlt7969hIaGnjGISNNntxvM++UdNPdccgFt/D1NrkhERMxU49s006ZN45133uH9999n9+7d3HfffRQWFlY+XTNu3DimT59e2f6+++4jJyeHqVOnsnfvXr755huee+45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Yzz11FN/eH1xVBoZOYO8vDzgtxf0JSQkUF5eTmxsbGWbrl27EhERQXx8fI2++4cffmDp0qXMmzev7gpuROqr77766is6dOjA119/Tfv27YmMjGTixInk5OTU7QmYrL76Lzo6GicnJxYsWIDNZiMvL48PP/yQ2NhYXF1d6/YkTFRX/ZeXl1flxV7x8fFVvgNgxIgRNf7vv7Grr/77PbvdTn5+/h++PM2R1GffLViwgJSUFGbOnFkPlTcODvGivIZkt9t56KGHGDx4MD179gQgIyMDNze30+Z3BAcHk5GRUe3vPnHiBHfccQcfffRRk1z+tz77LiUlhUOHDrF06VI++OADbDYbDz/8MKNHj+aHH36oy9MwTX32X/v27Vm5ciU33XQT99xzDzabjZiYGL799tu6PAVT1VX/rVu3jiVLlvDNN99UbsvIyCA4OPi077BarRQXF+Pp6Vm3J2OC+uy/35szZw4FBQXcdNNNdVa/meqz7/bt28fjjz/OTz/9hItL071kN90zq6XJkyezY8cOfv755zr/7rvvvptbbrmFSy65pM6/uzGoz76z2+2UlpbywQcf0LlzZwDee+89oqOjSU5OpkuXLnV+zIZWn/2XkZHB3Xffzfjx4xk7diz5+fnMmDGD0aNH891332GxWOr8mA2tLvpvx44dXH/99cycOZMrrriiDqtr/Bqq/xYtWsSsWbP44osvCAoKqvWxGpP66jubzcYtt9zCrFmzKv/da6p0m+Z/TJkyha+//ppVq1bRtm3byu0hISGUlZWRm5tbpX1mZiYhISHV/v4ffviBOXPm4OLigouLC3fddRd5eXm4uLgwf/78ujoNU9R334WGhuLi4lLlP8hu3boBkJaWdn7FNwL13X/z5s3Dz8+PF154gb59+3LJJZfw0UcfERcXx4YNG+rqNExTF/23a9cuLrvsMiZNmsRTTz1V5XchISGnPcGUmZmJr69vkxgVqe/++9XixYuZOHEin3zyyWm3vRxVffZdfn4+mzdvZsqUKZXXjb/97W9s27YNFxeXJjMqDGgCq2EYht1uNyZPnmy0adPG2Lt372m//3Ui0qefflq5bc+ePbWahJmUlFT5efbZZw0fHx8jKSnJyMnJqdNzaigN1XcrVqwwAGP//v2V2xITEw3ASE5OrpuTMUFD9d+0adOMgQMHVtl29OhRAzDWrl17/idikrrqvx07dhhBQUHGX/7ylzMe59FHHzV69uxZZdvYsWMdfgJrQ/WfYRjGokWLDA8PD2PZsmV1exImaYi+s9lsVa4ZSUlJxn333Wd06dLFSEpKMgoKCurn5EygMGIYxn333Wf4+fkZq1evNo4dO1b5KSoqqmxz7733GhEREcYPP/xgbN682YiJiTFiYmKqfM++ffuMrVu3Gvfcc4/RuXNnY+vWrcbWrVuN0tLSMx63KTxN01B9Z7PZjH79+hmXXHKJsWXLFmPz5s3GoEGDjMsvv7xBz7euNVT/xcXFGRaLxZg1a5axd+9eIyEhwRgxYoTRrl27KsdyNHXRf0lJSUZgYKBx2223VfmOrKysyjYpKSmGl5eX8Ze//MXYvXu3MW/ePMPZ2dlYvnx5g55vXWuo/vv3v/9tuLi4GPPmzavSJjc3t0HPty41VN/9XlN9mkZhxDAM4IyfBQsWVLYpLi427r//fqNly5aGl5eX8ac//ck4duxYle8ZOnToGb8nNTX1jMdtCmGkIfvuyJEjxg033GB4e3sbwcHBxh133GGcOHGigc60fjRk/3388cdG3759jRYtWhiBgYHGddddZ+zevbuBzrR+1EX/zZw584zf0a5duyrHWrVqldGnTx/Dzc3N6NChQ5VjOKqG6r+z/f0cP358w51sHWvIv3v/q6mGEYthGEbNb+6IiIiI1A1NYBURERFTKYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiqv8HcNc58rfYRtwAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "alpha_scores = pd.DataFrame(alpha_scores).rename(columns={\"prediction\": \"alpha\"}).T\n",
        "alpha_scores.cumsum().plot()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6bcd6927",
      "metadata": {
        "id": "6bcd6927"
      },
      "source": [
        "We can see that a basic model trained on our dataset has okay performance, but it starts to level out toward the end. If we calculate the sharpe of these scores we see it's pretty low (the 10-year sharpe of the S&P500 is about 0.6):"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "id": "3fe7a3cd",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 115
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:22:32.871760Z",
          "iopub.status.busy": "2025-09-26T23:22:32.871428Z",
          "iopub.status.idle": "2025-09-26T23:22:32.877899Z",
          "shell.execute_reply": "2025-09-26T23:22:32.876502Z"
        },
        "id": "3fe7a3cd",
        "outputId": "fbbfc1b4-469e-4fdb-add2-ded56a7b1229"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>0</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>prediction</th>\n",
              "      <td>0.802974</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div><br><label><b>dtype:</b> float64</label>"
            ],
            "text/plain": [
              "prediction    0.802974\n",
              "dtype: float64"
            ]
          },
          "execution_count": 14,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "alpha_scores.mean() / alpha_scores.std()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "7ba5b26e",
      "metadata": {
        "id": "7ba5b26e"
      },
      "source": [
        "This is because our basic features and factors are really only useful to **remove** exposures to them, not rely on them for prediction - this is why you must bring your own data sources to Numerai Signals. We leave it as an exercise to the reader to gather data and train a model to be aware of the neutralization and the sample-weighting data. The goal should be to produce a model with good alpha.\n",
        "\n",
        "For now, let's continue with how to structure your live submission."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "84168430-581c-4d71-bc26-55ad94fe9c3c",
      "metadata": {
        "id": "84168430-581c-4d71-bc26-55ad94fe9c3c"
      },
      "source": [
        "# Live Submission\n",
        "\n",
        "To make a live submission, you only need to submit a ticker column with its signal.\n",
        "\n",
        "We accept the following tickers for live submissions:\n",
        "\n",
        "* cusip\n",
        "* sedol\n",
        "* bloomberg_ticker\n",
        "* composite_figi\n",
        "* numerai_ticker"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "cbf940f3",
      "metadata": {},
      "outputs": [],
      "source": []
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "id": "680c8c24-0e66-48ed-915c-055d81f50fe2",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 424
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:22:32.879949Z",
          "iopub.status.busy": "2025-09-26T23:22:32.879777Z",
          "iopub.status.idle": "2025-09-26T23:22:33.511057Z",
          "shell.execute_reply": "2025-09-26T23:22:33.510772Z"
        },
        "id": "680c8c24-0e66-48ed-915c-055d81f50fe2",
        "outputId": "2070c6eb-b7cf-4b1b-f835-889b02ec5580"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "summary": "{\n  \"name\": \"submission\",\n  \"rows\": 7168,\n  \"fields\": [\n    {\n      \"column\": \"numerai_ticker\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 7168,\n        \"samples\": [\n          \"VMD US\",\n          \"185750 KR\",\n          \"VLGEA US\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"signal\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.28869527027192704,\n        \"min\": 6.975446428571428e-05,\n        \"max\": 0.9999302455357143,\n        \"num_unique_values\": 7168,\n        \"samples\": [\n          0.9831891741071429,\n          0.9806780133928571,\n          0.9608677455357143\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}",
              "type": "dataframe",
              "variable_name": "submission"
            },
            "text/html": [
              "\n",
              "  <div id=\"df-f9e66909-0d97-4829-aaae-3331fc9e3785\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>numerai_ticker</th>\n",
              "      <th>signal</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>000080 KR</td>\n",
              "      <td>0.990723</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>000100 KR</td>\n",
              "      <td>0.161063</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>000120 KR</td>\n",
              "      <td>0.896694</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>000150 KR</td>\n",
              "      <td>0.556431</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>000210 KR</td>\n",
              "      <td>0.933245</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7163</th>\n",
              "      <td>ZURN CH</td>\n",
              "      <td>0.601493</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7164</th>\n",
              "      <td>ZVRA US</td>\n",
              "      <td>0.138184</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7165</th>\n",
              "      <td>ZWS US</td>\n",
              "      <td>0.366839</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7166</th>\n",
              "      <td>ZYME US</td>\n",
              "      <td>0.111258</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7167</th>\n",
              "      <td>ZZB SE</td>\n",
              "      <td>0.393345</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>7168 rows × 2 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-f9e66909-0d97-4829-aaae-3331fc9e3785')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-f9e66909-0d97-4829-aaae-3331fc9e3785 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-f9e66909-0d97-4829-aaae-3331fc9e3785');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-e8a86a76-325a-45a1-9ae2-3742a2c7781c\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-e8a86a76-325a-45a1-9ae2-3742a2c7781c')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-e8a86a76-325a-45a1-9ae2-3742a2c7781c button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "  <div id=\"id_effc4e3f-6179-4101-9e49-01daa80a39ea\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('submission')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_effc4e3f-6179-4101-9e49-01daa80a39ea button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('submission');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "text/plain": [
              "     numerai_ticker    signal\n",
              "0         000080 KR  0.990723\n",
              "1         000100 KR  0.161063\n",
              "2         000120 KR  0.896694\n",
              "3         000150 KR  0.556431\n",
              "4         000210 KR  0.933245\n",
              "...             ...       ...\n",
              "7163        ZURN CH  0.601493\n",
              "7164        ZVRA US  0.138184\n",
              "7165         ZWS US  0.366839\n",
              "7166        ZYME US  0.111258\n",
              "7167         ZZB SE  0.393345\n",
              "\n",
              "[7168 rows x 2 columns]"
            ]
          },
          "execution_count": 19,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from numerai_tools.scoring import tie_kept_rank\n",
        "\n",
        "napi.download_dataset(f'signals/{DATASET_VERSION}/live.parquet')\n",
        "live = pd.read_parquet(f'signals/{DATASET_VERSION}/live.parquet')\n",
        "\n",
        "live['signal'] = model.predict(live[feature_cols])\n",
        "# make sure we rank it to ensure output is between 0 and 1\n",
        "live['signal'] = tie_kept_rank(live[['signal']])\n",
        "\n",
        "submission = live[['numerai_ticker', 'signal']]\n",
        "submission"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "id": "3f38bb35-5c5b-4a88-a7ed-c0174c2d3a94",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 121
        },
        "execution": {
          "iopub.execute_input": "2025-09-26T23:22:33.512209Z",
          "iopub.status.busy": "2025-09-26T23:22:33.512127Z",
          "iopub.status.idle": "2025-09-26T23:22:33.589196Z",
          "shell.execute_reply": "2025-09-26T23:22:33.588941Z"
        },
        "id": "3f38bb35-5c5b-4a88-a7ed-c0174c2d3a94",
        "outputId": "824e26d9-f443-45e4-a00f-01835af6e091"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "/tmp/ipython-input-1415450786.py:4: SettingWithCopyWarning: \n",
            "A value is trying to be set on a copy of a slice from a DataFrame.\n",
            "Try using .loc[row_indexer,col_indexer] = value instead\n",
            "\n",
            "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
            "  submission[['signal']] = tie_kept_rank(submission[['signal']])\n"
          ]
        },
        {
          "data": {
            "application/javascript": "\n    async function download(id, filename, size) {\n      if (!google.colab.kernel.accessAllowed) {\n        return;\n      }\n      const div = document.createElement('div');\n      const label = document.createElement('label');\n      label.textContent = `Downloading \"${filename}\": `;\n      div.appendChild(label);\n      const progress = document.createElement('progress');\n      progress.max = size;\n      div.appendChild(progress);\n      document.body.appendChild(div);\n\n      const buffers = [];\n      let downloaded = 0;\n\n      const channel = await google.colab.kernel.comms.open(id);\n      // Send a message to notify the kernel that we're ready.\n      channel.send({})\n\n      for await (const message of channel.messages) {\n        // Send a message to notify the kernel that we're ready.\n        channel.send({})\n        if (message.buffers) {\n          for (const buffer of message.buffers) {\n            buffers.push(buffer);\n            downloaded += buffer.byteLength;\n            progress.value = downloaded;\n          }\n        }\n      }\n      const blob = new Blob(buffers, {type: 'application/binary'});\n      const a = document.createElement('a');\n      a.href = window.URL.createObjectURL(blob);\n      a.download = filename;\n      div.appendChild(a);\n      a.click();\n      div.remove();\n    }\n  ",
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "application/javascript": "download(\"download_0d670336-388c-4442-89ba-2a8b26953591\", \"signals_example_preds.csv\", 189814)",
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "# Save and download your predictions\n",
        "filename = f'signals_example_preds.csv'\n",
        "from numerai_tools.scoring import tie_kept_rank\n",
        "submission[['signal']] = tie_kept_rank(submission[['signal']])\n",
        "submission.to_csv(filename, index=False)\n",
        "\n",
        "# Download file if running in Google Colab\n",
        "try:\n",
        "    from google.colab import files\n",
        "    files.download(filename)\n",
        "except:\n",
        "    pass"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "SjZUhwDoeOhZ",
      "metadata": {
        "id": "SjZUhwDoeOhZ"
      },
      "source": [
        "\n",
        "\n",
        "Now you can visit the [Submissions page](https://signals.numer.ai/submissions) to submit these predictions to your model. Once you submit, your predictions will begin scoring approximately 1 week later. Your final scores will be computed depending on the score - for example, Alpha is a 60D (or 60 business day) score, so it resolves approximately 13 weeks after you submit.\n"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "gpuType": "T4",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.11.11"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}
